#ifndef KIEPEREXCEPTION_HPP
#define KIEPEREXCEPTION_HPP

#include <iosfwd>

namespace kieper {
    class KieperException {
        friend std::ostream& operator<<(std::ostream& output, const KieperException& e);
    public:
        KieperException(const char* msg, char* reason = NULL);
        KieperException(const char* msg, const char* file=0, unsigned int line=0,
            char* reason = NULL);
        const char* msg();
        const char* longMsg();
        ~KieperException();
    protected:
        void setReason(char* reason);
    private:
        KieperException& operator=(const KieperException& other);
        const char* msg_;
        const char* file_;
        const unsigned int line_;
        char* reason_;
    };
}

#endif
